Software applications typically are configured to take one of two forms. Most applications can be installed and configured as a single instance application that operates as a relatively independent bundle of functionality and that typically executes on a single node or hardware platform. By contrast, some applications can be configured as a multiple instance application and installed on a cluster of nodes. As such, each node typically executes an instance of the application, with each instance providing the same or similar functionality and with each node providing appropriate resources, such as processing and memory resources. Further, each node in a cluster is connected to other nodes in the cluster and typically shares resources, such as data items, with other nodes in the cluster. For example, a database system may run on each node in a cluster and manage data stored on data blocks on shared storage, such as disk storage devices. Hence, a properly configured cluster environment provides enhanced scalability and availability of resources in relation to software applications executing in the cluster environment.
A scalable cluster is a cluster to which resources may be added to proportionally increase the capacity of the cluster as a whole. A resource may be, for example, a computer, a CPU, a storage device, interconnect bandwidth, or dynamic memory per computer. Typically, capacity is measured according to some measure of business growth, such as the number of users, web page hits per second, transactions per period of time, and/or terabytes of data.
One problem with a single instance application is that it is a single point of failure. Once the application fails, all of the clients of the application can no longer use the services provided by the application. Further, a single instance application can be overburdened with service requests from clients, thus resulting in reduced throughput and denial-of-service attacks.
Some software applications can be configured to take either of the two forms, that is, configured in either a single instance environment or a multiple instance environment. However, single instance applications and multiple instance applications have historically existed in their own domains, with no method or mechanism for converting the former to the latter.
Based on the foregoing, it is clearly desirable to provide an automated mechanism for converting a single instance application to a multiple instance application.